package com.gopay.common.constants.trans;

/**
 * 订单交易状态:
 * 
 *  第1位为状态类型:
 *  2   完成类 标识一笔订单生命周期正常完成，包括处理成功及合理业务中断导致的生命周期完成。
 *  3   进行类 标识一笔订单生命周期正在进行中
 *  9   异常类 标识一笔订单生命周期由于非预期异常导致的生命周期中断
 *  
 *   第2-3位为状态归属:
 *   00  核心处理系统
 *   01  外部清算机构
 *   02  核心账务系统
 *   03  风控系统
 *   04  核心处理系统(付款状态) 手机钱包，迫不得已
 *   05  外围服务系统 手机钱包，迫不得已
 *   第4-5位为状态编号
 *   
 * @TxnStaCode.java
 * @author HJY
 * @2013-1-16 下午03:39:16  www.gopay.com.cn Inc.All rights reserved.
 */
public enum TxnStaCode {
    
    //>>>>>>>>>>>>>>>>>交易生命周期的完成<<<<<<<<<<<<<<<<<<
    /**
     * 订单交易状态 20000 - 成功
     */
    TXN_STA_CD_20000(20000),
    
    /**
     * 订单交易状态 20001 - 作废
     */
    TXN_STA_CD_20001(20001),
    
    /**
     * 订单交易状态 20002 - 失效·    
     */
    TXN_STA_CD_20002(20002),

    /**
     * 订单交易状态 20003 - 审批不通过
     */
    TXN_STA_CD_20003(20003),
    
    /**
     * 订单交易状态 20004 - portal审批不通过
     */
    TXN_STA_CD_20004(20004),
    /**
     * 订单交易状态 20005- 重复支付冲正终态 替换原 90002状态 9开头翻译为进行中
     * 生产优化10期 lx 2017-10-19 14:55:17
     */
    TXN_STA_CD_20005(20005),
    //>>>>>>>>>>>>>>>>>交易处理进行中<<<<<<<<<<<<<<<<<<
    /**
     * 订单交易状态 30000 - 处理中
     */
    TXN_STA_CD_30000(30000),
    
    /**
     * 订单交易状态 30001 - 用户操作中
     * G商融通新增
     * 商户发起请求，G商融通接口中，在异步页面停留的时候（目前有还款，签约，提现，充值），
     */
    TXN_STA_CD_30001(30001),
    
    /**
     * 订单交易状态 30003 - 乐观锁异常待重试（属于进行中大类）
     */
    TXN_STA_CD_30003(30003),

    /**
     * 订单交易状态 30101 - 外部清算机构处理中
     */
    TXN_STA_CD_30101(30101),

    /**
     * 订单交易状态 30102 - 外部清算机构处理成功
     */
    TXN_STA_CD_30102(30102),

    /**
     * 订单交易状态 30300 - 风控审核中
     */
    TXN_STA_CD_30300(30300),
    
    
    /**
     * 订单交易状态 30401 - 待付款
     */
    TXN_STA_CD_30401(30401),
    
    /**
     * 订单交易状态 30402 - 付款成功
     */
    TXN_STA_CD_30402(30402),
    
    /**
     * 订单交易状态 30501 - 已受理
     */
    TXN_STA_CD_30501(30501),
    
    //>>>>>>>>>>>>>>>>>交易处理异常<<<<<<<<<<<<<<<<<<
    
    /**
     * 订单交易状态 90000 - 系统处理异常
     */
    TXN_STA_CD_90000(90000),

    /**
     * 订单交易状态 90001 - 系统处理超时
     */
    TXN_STA_CD_90001(90001),
    
    /**
     * 订单交易状态 90002 - 交易重复处理
     */
    TXN_STA_CD_90002(90002),
    
    /**
     * 订单交易状态 90003 - 乐观锁异常(属于失败大类，终态)
     */
    TXN_STA_CD_90003(90003),


    /**
     * 订单交易状态 90101 - 外部清算机构处理异常    
     */
    TXN_STA_CD_90101(90101),
    
    /**
     * 订单交易状态 90102 - 外部清算机构订单金额异常    
     */
    TXN_STA_CD_90102(90102),
    
    /**
     * 订单交易状态 90201 - 核心账务系统处理异常
     */
    TXN_STA_CD_90201(90201),
    
    /**
     * 订单交易状态90301 -交易未通过风控校验   
     */
    TXN_STA_CD_90301(90301),
    
    /**
     * 订单交易状态 90403 -付款失败
     */
    TXN_STA_CD_90403(90403),
    
    /**
     * 订单交易状态 90502 -告知失败（终态）
     * 应用范围：欧飞充话费、欧飞充流量、欧飞充加油卡 
     */
    TXN_STA_CD_90502(90502),

	/**
     * add by tangyang at 20160719
     * 订单交易状态 90503 -告知失败未退款
     * 应用范围：欧飞充话费、欧飞充流量、欧飞充加油卡 
     */
    TXN_STA_CD_90503(90503),
	
	/**
	 * add by tangyang at 20160719
     * 订单交易状态 90504 -快捷支付失败退款中
     * 应用范围：欧飞充话费、欧飞充流量、欧飞充加油卡、手机转账到银行卡、信用卡还款
     */
    TXN_STA_CD_90504(90504);
	
    public final int value;
    
    private TxnStaCode(int value){
        this.value = value;
    }
    
    /**
     * 获取类别
     * @param txnStaCd
     * @return
     */
    public static String getCategory(int txnStaCd){
//        String name="";
//
//        if (txnStaCd == TxnStaCode.TXN_STA_CD_20000.value) {
//            name="成功";
//        } else if (txnStaCd >= 30000 && txnStaCd < 40000 || txnStaCd >= 90000) {
//            name="进行中";
//        } else {
//            name="失败";
//        }
        //
        /* 默认展示状态为"进行中"，避免出现新加状态未能命中，反馈状态为"失败"的情况。 added by wangdong at 2018-03-19 start*/
        String name="进行中";
        if (txnStaCd == TxnStaCode.TXN_STA_CD_20000.value){
            name="成功";
        }else if (txnStaCd > 20000 && txnStaCd < 30000) {
            name = "失败";
        }
        return name;
        /* 默认展示状态为"进行中"，避免出现新加状态未能命中，反馈状态为"失败"的情况。 added by wangdong at 2018-03-19 end*/
    }
    
    /**
     * 获取名称
     * @param code
     * @return
     */
    public static String getName(int code) {
        String typeName = "";
        if (code == TxnStaCode.TXN_STA_CD_30000.value) {
            typeName = "进行中 ";
        }  else if (code == TxnStaCode.TXN_STA_CD_20000.value) {
            typeName = "成功 ";
        } else if (code == TxnStaCode.TXN_STA_CD_30101.value) {
            typeName = "出款清算单位处理中 ";
        } else if (code == TxnStaCode.TXN_STA_CD_30102.value) {
            typeName = "出款清算单位成功 ";
        } else if (code == TxnStaCode.TXN_STA_CD_30300.value) {
            typeName = "风控审核中 ";
        } else if (code == TxnStaCode.TXN_STA_CD_90000.value) {
            typeName = "系统异常处理失败 ";
        } else if (code == TxnStaCode.TXN_STA_CD_90001.value) {
            typeName = "超时 ";
        } else if (code == TxnStaCode.TXN_STA_CD_90201.value) {
            typeName = "账务处理失败 ";
        } else if (code == TxnStaCode.TXN_STA_CD_20001.value) {
            typeName = "作废 ";
        } else if (code == TxnStaCode.TXN_STA_CD_20003.value) {
            typeName = "审批不通过 ";
        } else if (code == TxnStaCode.TXN_STA_CD_20005.value) {
            typeName = "重复支付冲正";
        } else if (code == TxnStaCode.TXN_STA_CD_90101.value) {
            typeName = "出款清算单位失败 ";
        } else if (code == TxnStaCode.TXN_STA_CD_20002.value) {
            typeName = "失效 ";
        } 
        //start 增加以下码值的翻译 modify by tanngyang at 20161025
        else if (code == TxnStaCode.TXN_STA_CD_30401.value) {
            typeName = "待付款 ";
        } else if (code == TxnStaCode.TXN_STA_CD_30402.value) {
            typeName = "付款成功 ";
        } else if (code == TxnStaCode.TXN_STA_CD_90502.value) {
            typeName = "失败 ";
        } else if (code == TxnStaCode.TXN_STA_CD_90503.value) {
            typeName = "失败未退款 ";
        } else if (code == TxnStaCode.TXN_STA_CD_90504.value) {
            typeName = "快捷支付失败退款中 ";
        }
        //end 增加以下码值的翻译 modify by tanngyang at 20161025
        return typeName;
    }
    
    public static void main(String[] args) {
        System.out.println(TXN_STA_CD_90502.toString());
    }
}
